#include<stdio.h>
#include<stdlib.h>

typedef struct double_link
{
    struct double_link *front;
    int data;
    struct double_link *next;
}dlink;

// 初始化
dlink *init(dlink *head){
    head = (dlink *)malloc(sizeof(dlink));
    head->next=NULL;
    head->front=NULL;
    head->data=1;
    dlink *temp=head;
    for(int i=2;i<=5;i++){
        dlink *body=(dlink *)malloc(sizeof(dlink));
        body->front=NULL;
        body->data=i;
        body->next=NULL;

        temp->next=body;
        body->front = temp;
        temp = temp->next;
    }
    return head;
}

// 展示
void show(dlink *head){
    dlink *temp=head;
    while(temp){
        if(temp->next==NULL){
            printf("%d",temp->data);
        }
        else{
            printf("%d<->", temp->data);
        }
        
        temp=temp->next;
    }
}

// 添加
dlink * add(dlink *head, int data, int loc){
    dlink *temp=(dlink *)malloc(sizeof(dlink));
    temp->front=NULL;
    temp->next=NULL;
    temp->data=data;

    // 插入到表头
    if(loc==1){
        temp->next = head;
        head->front = NULL;
        head = temp;
    }
    // 插入到
    else{
        dlink *body=head;
        for(int i=1;i<loc-1;i++){
            body = body->next;
        }
        if(body->next==NULL){
            // 说明是表尾
            body->next = temp;
            temp->front = body;
            temp->next = NULL;
        }
        else{
            // 表中间
            temp->next = body->next;
            temp->next->front = temp;
            temp->front = body;
            body->next = temp;
        }


    }
    return head;
}

// 删除
dlink * delete(dlink *head, int data){
    dlink *temp = head;
    while(temp){
        if(temp->data==data){
            temp->front->next = temp->next;
            temp->next->front = temp->front;
            free(temp);
            return head;
        }
        temp = temp->next;
    }
    printf("链表中无挂数据元素\n");
    return head;
}

// 查找
int find(dlink *head, int data){
    dlink *temp = head;
    int loc=1;
    while(temp){
        if(temp->data==data){
            retrun i;
        }
        temp = temp->next;
        i++;
    }
    return -1;

}

// 更改
dlink * update(dlink *head, int loc, int new){
    dlink *temp=head;
    for(int i=0;i<loc;i++){
        temp=temp->next;
    }
    temp->data=new;
    return head;
}

int main(){
    dlink *head=NULL;
    head = init(head);
    show(head);
    return 0;
}